// Copyright (c) 2023 Cesanta Software Limited
// All rights reserved

#ifndef __NET_H__
#define __NET_H__

#include "mongoose.h"

#ifdef __cplusplus
extern "C" {
#endif
struct MODBUSDAR {
  float doseRatedoseRateUSVH;    // 0 1剂量率
  float doseRateUSV;             // 2 3累计剂量率
  unsigned short tgSingleZero;   // 4 推杆原点状态 0 零位 1在原点
  unsigned short qpSingle;       // 5 排气状态 0气体 1液体
  unsigned short ktSingle;       // 6 卡套状态 0未锁 1锁定
  unsigned short blSingle;       // 7 保留
  signed int tgCurrentPosition;  // 8 9推杆控制板标记的当前位置
  signed int tgPositionSetted;   // 10 11推杆动作值增减量
  unsigned short tgCMD;          // 12 推杆动作方向 0 不动作 1正 2负
                                 // 0推杆不动作
  // 1推杆正相对运动 以tgPositionSetted值 动作
  // 2推杆复相对运动 以tgPositionSetted值 动作
  // 3推杆动作指定位置
  // 4推杆回原点
  // 5推杆，
  unsigned short tgEq1TrigZeroAction;  // 13 开机自动回原的功能
                                       // 0不回原，本来就在原点
                                       // 1根据原点信号触发回原过程，
                                       // 2向下运动
                                       // 3判断原点，超时未到回到上一步
                                       // 4回原点结束
  unsigned short v1Position;  // 14三通阀模式：0调试自定义角度下，三通阀1角度
  unsigned short v2Position;  // 15三通阀模式：0调试自定义角度下，三通阀1角度
  unsigned short v3Position;  // 16三通阀模式：0调试自定义角度下，三通阀1角度
  unsigned short v4Position;  // 17三通阀模式：0调试自定义角度下，三通阀1角度
  unsigned short v5Position;  // 18三通阀模式：0调试自定义角度下，三通阀1角度
  unsigned short FiveValveModeSet;       // 19三通阀模式：
                                         // 0保持，刚开机的时候为0
                                         // 1调试自定义角度
                                         // 2配药阶段
                                         // 3抽取润湿液
                                         // 4推润湿液 润气
                                         // 5推润湿液 润水
                                         // 6进气检测压力
                                         // 7抽取空气进管存
                                         // 8推注空气进过滤器
  unsigned short set_enabled;            // 20设置使能
  unsigned short devEq2TrigControlFlow;  // 21自动动作:0保持不动作
  unsigned short autoRunCNT;             // 22自动润湿 重复润湿的计数
  // 0保持不动
  // 1保持配药模式
  // 2开始抽取润湿液至润湿针筒 开始动阀
  // 3开始抽取润湿液至润湿针筒 等待阀动完成
  // 4开始抽取润湿液至润湿针筒 开始动电机
  // 5开始抽取润湿液至润湿针筒 等待电机动作完成
  // 6推润湿液空气缓存 开始动阀
  // 7推润湿液空气缓存 等待阀动完成
  // 8推润湿液空气缓存开始动电机
  // 9推润湿液空气缓存 等待电机动作完成
  // 10推润湿液至过滤器 开始动阀
  // 11推润湿液至过滤器 等待阀动完成
  // 12推润湿液至过滤器 开始动电机
  // 13推润湿液至过滤器 等待电机动作完成
  // 14正在进气检测压力 开始动阀
  // 15正在进气检测压力 开始动阀 等待阀动完成
  // 16正在进气检测压力 开始动电机
};

 
extern struct mg_mgr mgr;        // Initialise
extern struct MODBUSDAR mbdata;  // mbdata.tgPositionSetted
#if !defined(HTTP_URL)
#define HTTP_URL "http://0.0.0.0:80"
#endif

#if !defined(HTTPS_URL)
#define HTTPS_URL "https://0.0.0.0:443"
#endif

#define MAX_DEVICE_NAME 40
#define MAX_EVENTS_NO 400
#define MAX_EVENT_TEXT_SIZE 10
#define EVENTS_PER_PAGE 20

// Event log entry
struct ui_event {
  uint8_t type, prio;
  unsigned long timestamp;
  char text[10];
};

void web_init(struct mg_mgr *mgr);

#ifdef __cplusplus
}
#endif
#endif
